Разработка печатных форм с учетом возможного внесения изменений в макет пользователем

#std789

Область применения: управляемое приложение.

Если в конфигурации предусмотрена возможность редактирования макетов пользователем (например, средствами подсистемы «Печать» Библиотеки стандартных подсистем), то необходимо учитывать то, что любые параметры или области макета могут быть изменены или удалены.
В зависимости от используемой технологии компоновки печатных форм эти требования различаются.

1. При использовании технологии формирования печатной формы средствами подсистемы Печать Библиотеки стандартных подсистем (по макету СКД), для обеспечения вывода изменённых макетов следует сохранять существующий состав полей в макетах ДанныеПечати объектов метаданных.

1.1. При наличии макета ДанныеПечати в объекте допускается расширение состава полей, но не допускается переименование или удаление полей.

1.2. При отсутствии макета ДанныеПечати в объекте не допускается переименование реквизитов или табличных частей. При необходимости изменения состава реквизитов и/или табличных частей объекта необходимо предварительно создать макет ДанныеПечати, чтобы зафиксировать прежний состав полей объекта.

2. При программной компоновке печатной формы помимо разработки макета, требуется разработка процедур получения данных и вывода в печатную форму. Поэтому при разработке процедуры вывода печатной формы необходимо принять меры по повышению устойчивости программного кода к изменениям в макете.

2.1. Области макета могут быть удалены пользователем, поэтому перед получением области необходимо выполнить проверку её существования в макете.

Неправильно:

ОбластьМакета = Макет.ПолучитьОбласть(ИмяОбласти);

Правильно:

ОбластьМакета = Макет.Области.Найти(ИмяОбласти);
Если ОбластьМакета <> Неопределено Тогда
 ...
 // Вывод области макета в печатную форму.
 ...
КонецЕсли

2.2. Следует избегать явного присвоения значений параметров в областях печати. Вместо этого следует использовать глобальный метод ЗаполнитьЗначенияСвойств или метод Заполнить коллекции ПараметрыМакетаТекстовогоДокумента.

Неправильно:

ОбластьПечати.Параметры.Организация = ДанныеПечати.Организация; // будет ошибка при отсутствии в макете параметра Организация

ОбластьПечати.Параметры.Контрагент = ДанныеПечати.Контрагент;   // будет ошибка при отсутствии в макете параметра Контрагент

Правильно:

ЗаполнитьЗначенияСвойств(ОбластьПечати.Параметры, ДанныеПечати);

или

ОбластьПечати.Параметры.Заполнить(ДанныеПечати);

3. В общем случае, изменения в макетах печати (в метаданных) могут быть обязательными и необязательными. Обязательные – если, например, в макете отражены изменения в регламентированной печатной формы. Необязательные - если разработчик добавил новую область печатной формы, без которой печатная форма все еще остается пригодной к использованию.

Если изменение обязательное, то при обновлении конфигурации необходимо отключить пользовательский макет, оповестив об этом пользователя. При наличии в конфигурации Библиотеки стандартных подсистем, для отключения пользовательского макета необходимо использовать процедуру ОтключитьПользовательскийМакет общего модуля УправлениеПечатью. Для проверки наличия и использования изменённых макетов необходимо использовать функции ПоставляемыйМакетИзменен и ИспользуетсяПользовательскийМакет общего модуля УправлениеПечатью.

Если изменение не обязательное, то в новом коде формирования печатной формы необходимо обеспечить вывод печатной формы с использованием старого макета (см. п. 2.1 и 2.2).